「単独エンジンによる Docker クラスター」にdocker compose upでデプロイする
code:sh
docker context create ecs myecscontext
docker compose up --context myecscontext
じゃあdocker contextにさくらVPSを指定したら同じようにデプロイできるのでは?と思ってDocker Contextのドキュメントを読んでみたら、以下のようなものがcontextとして指定できるらしい。 Docker Swarm クラスター
単独エンジンによる Docker クラスター
Kubernetes クラスター
「単独エンジンによる Docker クラスター」がおそらく「dockerデーモンが動いてるだけのさくらVPS」に該当するんじゃないかと思う。
あんまりやってる人が見当たらない
この人くらい
そして知りたかったことこのスライドにだいたい全部書いてあった
動機もほぼ一緒
(既にそこそこ長い)dockerの歴史からすると、composeがcontextをサポートしたのは割と最近だからかも
さくらVPS上のdockerデーモンへの接続にはsshを使う
さくらVPSのdockerデーモンを使用するcontextを作成する
sshhost は ssh sshhost で指定できる名前
典型的には ~/.ssh/config のHostディレクティブに設定した名前
code:sh
docker context create --docker host=ssh://sshhost mycontext
compose up
code:sh
docker compose up -d --build --force-recreate --remove-orphans
Railsでdb:migrateする場合はこんな感じ
code:sh
export RAILS_MASTER_KEY="$(cat config/credentials/production.key)"
docker compose -p THIS_PROJECT_NAME build
# docker compose down
# stop とか down がうまく動かないので、ここだけsshコマンド越しにリモートのdockerコマンドを実行している
ssh sshhost -- docker compose -p THIS_PROJECT_NAME down
docker compose -p THIS_PROJECT_NAME run --rm web rails db:migrate
docker compose -p THIS_PROJECT_NAME up -d --remove-orphans
docker compose down が失敗する問題
ssh経由のcontextでdownやstopを使うと高確率で失敗する
根本解決が難しそうだったので、ここだけsshコマンド越しにリモートのdockerコマンドを実行することにした
donw はcomposeファイルを渡さなくても -p でプロジェクト名さえ指定すれば期待通り動くようなので
だめなケースもあるかもしれない